
import flutter
import db

import time


def allTest():
    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        省份 = ctx.省份
        查询结果 = ctx.SQL(
            select=[学校.名称, 省份.省名],
        )
        return 查询结果


def orTest():
    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        省份 = ctx.省份
        查询结果 = ctx.SQL(
            select=[学校.名称, 省份.省名],
            where=db.OR(
                学校.是否985 != True,
                省份.列_211高校数量 >= 1,
            )
        )
        return 查询结果


def maxTest():
    with db.transaction(db_id='CCTV中国经济年度人物',
                        user_secrets='shuit') as ctx:
        公司 = ctx.公司

        查询结果 = ctx.SQL(
            select=db.MAX([公司.市值]),
        )
        return 查询结果


def minTest():
    with db.transaction(db_id='CCTV中国经济年度人物',
                        user_secrets='shuit') as ctx:
        公司 = ctx.公司

        查询结果 = ctx.SQL(
            select=db.MIN([公司.市值]),
            where=db.AND(
                公司.员工数 >= 100,
            )
        )
        return 查询结果


def andTest():
    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        省份 = ctx.省份
        查询结果 = ctx.SQL(
            select=[学校.名称],
            where=db.AND(
                学校.是否985 != True,
                省份.列_211高校数量 >= 1,
            )
        )
        return 查询结果


def insertTest():
    # create/insert
    # with db.transaction(db_id='2018年各校招生计划',
    #                     user_secrets='12345678') as ctx:
    #     table = ctx.CREATE()

    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        ctx.SQL(
            insertInto=ctx.学校,
            values=[
                "item_enterprise_2_6",
                "中山大学",
                "广州",
                "综合",
                True,
                True
            ]
        )

    # time.sleep(10)

    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        查询结果 = ctx.SQL(
            select=[学校.名称],
        )

        return 查询结果


def updateTest():
    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        ctx.SQL(
            update=学校,
            set=[学校.是否985, False],
            where=db.AND(
                学校.名称 == "北京大学"
            ),
        )

    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        查询结果 = ctx.SQL(
            select=[学校.名称, 学校.是否985],
        )

        return 查询结果


def deleteTest():
    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        ctx.SQL(
            delete=学校,
            where=db.OR(
                学校.名称 == "中山大学",
            ),
        )

    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets='shuit') as ctx:
        学校 = ctx.学校
        查询结果 = ctx.SQL(
            select=[学校.名称, 学校.是否985],
        )

        return 查询结果


def multiUserTest(user):
    with db.transaction(db_id='2018年各校招生计划',
                        user_secrets=user) as ctx:
        学校 = ctx.学校
        省份 = ctx.省份
        查询结果 = ctx.SQL(
            select=[学校.名称, 省份.省名],
        )
        return 查询结果


def run_app():
    # 查询结果 = multiUserTest("shuit")
    查询结果 = deleteTest()
    # 把计算结果表格转换为 widget 显示在网页上

    def table_widget(table):
        headers = [column.column_name for column in table.columns]
        rows = [headers]
        for i in range(len(table)):
            rows.append([str(c) for c in table[i]])
        row_widgets = []
        for row in rows:
            text_widgets = [flutter.Text(c) for c in row]
            row_widgets.append(flutter.Row(text_widgets,
                                           mainAxisAlignment=flutter.MainAxisAlignment.spaceEvenly,
                                           mainAxisSize=flutter.MainAxisSize.max))
        return flutter.Column(row_widgets)

    widget = table_widget(查询结果)
    javascript.document.body.appendChild(widget.render())
